<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
	<h1>자바 표준 태그 라이브러리 : JSTL</h1>
	<h3>개요</h3>
	<p>
		맵이나 콜렉션의 항목 순회, 조건에 따라 실행, XML/DB 처리,
		DB 접근 및 조작등의 일반적인 작업을 처리하는 사용자 정의 태그
		라이브러리의 집합을 의미
	</p>
	<p>jstl.java.net에서 API, implementation을 다운로드</p>
	<p>
		다운로드 받은 파일은 WEB-INF/lib에 저장하고
		taglib 지시문으로 해당 라이브러리의 접두사와 uri를 정의
	</p>
	
	<h3>JSTL 구성</h3>
	<p>core : 변수지원, 흐름제어, URL 관리 및 기타, 접두사는 c</p>
	<p>i18n : 인코딩처리, 날짜, 시간 표기, 접두사는 fmt</p>
	<p>functions : 콜렉션, 문자열 처리를 위한 다양한 메서드 지원, 접두사는 fn</p>
	<p>sql : 데이터베이스 접근 및 처리 지원, 접두사는 sql</p>
	<p>xml : xml 접근 및 처리 지원, 접두사는 xml</p>
	
	<hr/>
	<h3>core</h3>
	<p>
		c:out - 표현식을 평가하고 결과물 JspWriter로 출력<br />
		JSP2.x에서는 $&#123; }를 더 많이 사용<br />
		하지만, 변수값에 태그가 포함된 경우 xml escaping을 위해
		여전히 out 태그를 사용
	</p>
	<p>
		xml escaping : XSS 공격을 방지하기 위해
		태그들을 특수문자로 변환하는 것을 의미
	</p>
	<p>c:set : 문자열 객체 생성 및 객체 유효범위지정</p>
	<p>c:remove : 문자열 객체 제거</p>
	<p>if</p>
	<p>choose, when, otherwise</p>
	<p>forEach</p>
	
	<hr/>
	<p><%= "오우야아아아아앙" %></p>
	<p>c:out - <c:out value="오우야아아아아앙" /></p>
	<p>
		스크립트릿 : <% String msg = "<p style='color:red'>오우야아~</p>";
		out.println(msg);%>
	</p>
	<p>
		c:set - <c:set var="msg" value="오우야아~"/>
		<c:out value="${ msg }" /> 보다는 EL 표현식 ${ msg } 추천
	</p>
	<p>
		c:set - <c:set var="msg" value="<p style='color:red'>오우야아~</p>"/>
		${ msg } 보다는 <c:out value="${ msg }" /> 추천
	</p>
	<p>XSS 테스트 - <c:set var="xss" value="<script> alert('헤헤헤헤'); </script>" /></p>
	${ xss }
	<c:set var="xss2" value="<script> while(true){alert('헤헤헤헤');} </script>"/>
	<c:out value="${xss2 }" />
	<%-- <c:out value="${xss2}" escapeXml="false" /> --%>
	<p>c:remove - <c:remove var="xss" /><c:remove var="xss2" /><c:remove var="msg" /> ${xss }${xss2 }${msg }</p>
	<p></p>
	<p></p>
	
</body>
</html>










